#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int g_val = 100;
int main()
{
    pid_t id = fork();
    if(id == 0)
    {
        int cnt = 5;
        while(1)
        {
            printf("child:pid:%d, ppid:%d, g_val:%d, &g_val:%p\n", getpid(), getppid(), g_val, &g_val);
            sleep(1);
            if(cnt == 0)
            {
                g_val = 200;
                printf("child change g_val: 100 -> 200");
            }
            cnt--;
        }
    }
    else
    {

        while(1)
        {
            printf("parent:pid:%d, ppid:%d, g_val:%d, &g_val:%p\n", getpid(), getppid(), g_val, &g_val);
            sleep(1);
        }   
    }
    return 0;
}



//int un_gval;
//int init_gval = 100;

//struct A
//{
//    int a;
//    int b;
//    int c;
//}obj;
//int main(int argc, char* argv[], char* env[])
//{
//   // char* str = "hello";
//   // *str = 'h';
//   // printf("%s\n", str);
//   printf("%p\n", &obj.a);
//   printf("%p\n", &obj.b);
//   printf("%p\n", &obj.c);
//   int a = 20;
//   printf("a:%p\n", &a);
//   printf("code addr:%p\n", main);
//   const char* str = "hello";
//   printf("read only char addr:%p\n", str);
//   printf("init global value addr;%p\n", &init_gval);
//   printf("uninit global vale addr:%p\n", &un_gval);
//
//   char* heap1 = (char*)malloc(100);
//   char* heap2 = (char*)malloc(100);
//   char* heap3 = (char*)malloc(100);
//   char* heap4 = (char*)malloc(100);
//   char* heap5 = (char*)malloc(100);
//   printf("heap1 addr:%p\n", heap1);
//   printf("heap2 addr:%p\n", heap2);
//   printf("heap3 addr:%p\n", heap3);
//   printf("heap4 addr:%p\n", heap4);
//   printf("heap5 addr:%p\n", heap5);
//   printf("stack addr:%p\n", &heap1);
//   printf("stack addr:%p\n", &heap2);
//   printf("stack addr:%p\n", &heap3);
//   printf("stack addr:%p\n", &heap4);
//   printf("stack addr:%p\n", &heap5);
//   int i = 0;
//   for(i = 0; i < argc; i++)
//   {
//       printf("argv[%d]:%p\n", i, argv[i]);
//   }
//   for(i = 0; env[i]; i++)
//   {
//       printf("env[%d]: %p\n", i, env[i]);
//   }
//    return 0;
//}
